package com.zyh.number;

public class NumberDemo3 {
    public static void main(String[] args) {
        Integer num1 = 127;
        Integer num2 = 127;
        System.out.println(num1 == num2);
        Integer num3 = 128;
        Integer num4 = 128;
        System.out.println(num3 == num4);

//        Integer的valueOf()方法
/*
    减少new的次数，提高性能
    1.在valueOf()方法中，先执行静态内部类IntegerCache中的静态代码块，将[-128,127]范围内的整数值封装成对应的Integer对象，然后存入Integer[] cache中的对应位置
    例如：cache[0]=new Integer(-128);
    2.例如num1为127，在[-128,127]之间，就会获取数组索引为[255]的对象,num2为127也获得数组索引为[255]的对象，同一个对象就返回true
      而num3=128，不在[-128,127]之间，那么就会new一个新的Integer对象，同理num4也是new一个新的Integer对象，虽然值相同，但是不是同一个对象，所以就会返回false
 */


        /*
            1.加载Integer类中的静态成员内部类：IntegerCache
            2.执行静态成员内部类：IntegerCache中的静态代码块
            3.自动装箱调用valueOf(int num)时
                传入的整数num如果在[-128,127]之间，是直接从cache数组中获取对应的Integer对象，值相同，获取到的Integer对象就是同一个对象
                传入的整数num如果不在[-128,127]之间，是直接new对象，值相同，但是是new出来的，地址就不同了
         */
    }
}
